/**
 * Copyright (C) 2013-2014 the original author or authors.
 */
package com.foreveross.bsl.system.application;

import java.util.List;
import java.util.Map;
import java.util.Set;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.MediaType;

import com.foreveross.bsl.system.application.vo.CloudFunctionVo;


/**
 * 应用与云服务关联接口
 * 
 * @author Wangyi
 * @version v1.0
 * 
 * @date 2013-7-4
 * 
 */
@Path(value = "/appCloudLinks")
@Produces(MediaType.APPLICATION_JSON)
public interface AppCloudLinkService {
	
	/**
	 * 通过appId和cloudId关联应用与云服务
	 * 
	 * @param appId 应用实体ID
	 * @param cloudId 云服务实体ID
	 * @param userId 租户实体ID
	 */
	@GET
	@Path("/link/{appId}/{cloudId}/{userId}")
	void link(@PathParam("appId") String appId, @PathParam("cloudId") String cloudId, @PathParam("userId") String userId);

	/**
	 * 通过appId和cloudCode关联应用与云服务
	 * 
	 * @param appId 应用实体ID
	 * @param cloudCode 云服务实体代号
	 * @param userId 租户实体ID
	 */
	@GET
	@Path("/linkCode/{appId}/{cloudCode}/{userId}")
	void linkByCode(@PathParam("appId") String appId, @PathParam("cloudCode") String cloudCode, @PathParam("userId") String userId);

	/**
	 * 取消应用与云服务的关联
	 * 
	 * @param appId
	 * @param cloudId
	 */
	@GET
	@Path("/nulink/{appId}/{cloudId}")
	void unlink(@PathParam("appId") String appId, @PathParam("cloudId") String cloudId);

	/**
	 * 取消应用与云服务的关联
	 * 
	 * @param appId
	 * @param cloudCode
	 */
	@GET
	@Path("/unlinkCode/{appId}/{cloudCode}")
	void unlinkByCode(@PathParam("appId") String appId, @PathParam("cloudCode") String cloudCode);

	/**
	 * 获取指定用户关联云服务的个数
	 * 
	 * @param cloudId
	 * @param userId
	 * @return
	 */
	@GET
	@Path("/linkCount/{cloudId}/{userId}")
	int getLinkedCount(@PathParam("cloudId") String cloudId, @PathParam("userId") String userId);

	/**
	 * 获取指定用户关联云服务的个数
	 * 
	 * @param cloudIds
	 * @param userId
	 * @return 返回各自云服务的关联个数，使用map表示
	 */
	@GET
	@Path("/linkCounts/{userId}")
	Map<String, Integer> getLinkedCounts(@PathParam("userId") String userId);
	
	/**
	 * 获取租户已关联某云服务的应用ID列表
	 * @param userId
	 * @param cloudId
	 * @return
	 */
	@GET
	@Path("/linkApps/{userId}/{cloudId}")
	List<String> getLinkedAppIds(@PathParam("userId") String userId, @PathParam("cloudId") String cloudId);
	
	/**
	 * 获取租户已关联应用的云服务列表
	 * @param userId
	 * @param appId
	 * @return
	 */
	@GET
	@Path("/linkClodeFuns/{userId}/{appId}")
	List<CloudFunctionVo> getLinkedCloudFunctions(@PathParam("userId") String userId, @PathParam("appId") String appId);
	
	/**
	 * 取消应用与云服务的关联
	 * 
	 * @param appId
	 * @param userId
	 */
	@GET
	@Path("/delLinkedCloudByApps/{appId}/{userId}")
	void delLinkedCloudByApps(@PathParam("appId") String appId,@PathParam("userId") String userId);
}
